/* libFLAC - Free Lossless Audio Codec library * Copyright (C) 2000,2001,2002,2003,2004,2005 Josh Coalson * * 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 Xiph.org Foundation 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 FOUNDATION 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. */ #ifndef FLAC__STREAM_ENCODER_H #define FLAC__STREAM_ENCODER_H #include "export.h" #include "format.h" #include "stream_decoder.h" #ifdef __cplusplus extern "C" { #endif /** \file include/FLAC/stream_encoder.h * * \brief * This module contains the functions which implement the stream * encoder. * * See the detailed documentation in the * \link flac_stream_encoder stream encoder \endlink module. */ /** \defgroup flac_encoder FLAC/ *_encoder.h: encoder interfaces * \ingroup flac * * \brief * This module describes the two encoder layers provided by libFLAC. * * For encoding FLAC streams, libFLAC provides three layers of access. The * lowest layer is non-seekable stream-level encoding, the next is seekable * stream-level encoding, and the highest layer is file-level encoding. The * interfaces are described in the \link flac_stream_encoder stream encoder * \endlink, \link flac_seekable_stream_encoder seekable stream encoder * \endlink, and \link flac_file_encoder file encoder \endlink modules * respectively. Typically you will choose the highest layer that your input * source will support. * The stream encoder relies on callbacks for writing the data and * metadata. The file encoder provides these callbacks internally and you * need only supply the filename. * * The stream encoder relies on callbacks for writing the data and has no * provisions for seeking the output. The seekable stream encoder wraps * the stream encoder and also automaticallay handles the writing back of * metadata discovered while encoding. However, you must provide extra * callbacks for seek-related operations on your output, like seek and * tell. The file encoder wraps the seekable stream encoder and supplies * all of the callbacks internally, simplifying the processing of standard * files. The only callback exposed is for progress reporting, and that * is optional. */ /** \defgroup flac_stream_encoder FLAC/stream_encoder.h: stream encoder interface * \ingroup flac_encoder * * \brief * This module contains the functions which implement the stream * encoder. * * The basic usage of this encoder is as follows: * - The program creates an instance of an encoder using * FLAC__stream_encoder_new(). * - The program overrides the default settings and sets callbacks using * FLAC__stream_encoder_set_*() functions. * - The program initializes the instance to validate the settings and * prepare for encoding using FLAC__stream_encoder_init(). * - The program calls FLAC__stream_encoder_process() or * FLAC__stream_encoder_process_interleaved() to encode data, which * subsequently calls the callbacks when there is encoder data ready * to be written. * - The program finishes the encoding with FLAC__stream_encoder_finish(), * which causes the encoder to encode any data still in its input pipe, * call the metadata callback with the final encoding statistics, and * finally reset the encoder to the uninitialized state. * - The instance may be used again or deleted with * FLAC__stream_encoder_delete(). * * In more detail, the stream encoder functions similarly to the * \link flac_stream_decoder stream decoder \endlink, but has fewer * callbacks and more options. Typically the user will create a new * instance by calling FLAC__stream_encoder_new(), then set the necessary * parameters and callbacks with FLAC__stream_encoder_set_*(), and * initialize it by calling FLAC__stream_encoder_init(). * * Unlike the decoders, the stream encoder has many options that can * affect the speed and compression ratio. When setting these parameters * you should have some basic knowledge of the format (see the * user-level documentation * or the formal description). The * FLAC__stream_encoder_set_*() functions themselves do not validate the * values as many are interdependent. The FLAC__stream_encoder_init() * function will do this, so make sure to pay attention to the state * returned by FLAC__stream_encoder_init() to make sure that it is * FLAC__STREAM_ENCODER_OK. Any parameters that are not set before * FLAC__stream_encoder_init() will take on the defaults from the * constructor. * * The user must provide function pointers for the following callbacks: * * - Write callback - This function is called by the encoder anytime there * is raw encoded data to write. It may include metadata mixed with * encoded audio frames and the data is not guaranteed to be aligned on * frame or metadata block boundaries. * - Metadata callback - This function is called once at the end of * encoding with the populated STREAMINFO structure. This is so file * encoders can seek back to the beginning of the file and write the * STREAMINFO block with the correct statistics after encoding (like * minimum/maximum frame size). * * The call to FLAC__stream_encoder_init() currently will also immediately * call the write callback several times, once with the \c fLaC signature, * and once for each encoded metadata block. * * After initializing the instance, the user may feed audio data to the * encoder in one of two ways: * * - Channel separate, through FLAC__stream_encoder_process() - The user * will pass an array of pointers to buffers, one for each channel, to * the encoder, each of the same length. The samples need not be * block-aligned. * - Channel interleaved, through * FLAC__stream_encoder_process_interleaved() - The user will pass a single * pointer to data that is channel-interleaved (i.e. channel0_sample0, * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). * Again, the samples need not be block-aligned but they must be * sample-aligned, i.e. the first value should be channel0_sample0 and * the last value channelN_sampleM. * * When the user is finished encoding data, it calls * FLAC__stream_encoder_finish(), which causes the encoder to encode any * data still in its input pipe, and call the metadata callback with the * final encoding statistics. Then the instance may be deleted with * FLAC__stream_encoder_delete() or initialized again to encode another * stream. * * For programs that write their own metadata, but that do not know the * actual metadata until after encoding, it is advantageous to instruct * the encoder to write a PADDING block of the correct size, so that * instead of rewriting the whole stream after encoding, the program can * just overwrite the PADDING block. If only the maximum size of the * metadata is known, the program can write a slightly larger padding * block, then split it after encoding. * * Make sure you understand how lengths are calculated. All FLAC metadata * blocks have a 4 byte header which contains the type and length. This * length does not include the 4 bytes of the header. See the format page * for the specification of metadata blocks and their lengths. * * \note * The "set" functions may only be called when the encoder is in the * state FLAC__STREAM_ENCODER_UNINITIALIZED, i.e. after * FLAC__stream_encoder_new() or FLAC__stream_encoder_finish(), but * before FLAC__stream_encoder_init(). If this is the case they will * return \c true, otherwise \c false. * * \note * FLAC__stream_encoder_finish() resets all settings to the constructor * defaults, including the callbacks. * * \{ */ /** State values for a FLAC__StreamEncoder * * The encoder's state can be obtained by calling FLAC__stream_encoder_get_state(). */ typedef enum { FLAC__STREAM_ENCODER_OK = 0, /**< The encoder is in the normal OK state. */ FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR, /**< An error occurred in the underlying verify stream decoder; * check FLAC__stream_encoder_get_verify_decoder_state(). */ FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA, /**< The verify decoder detected a mismatch between the original * audio signal and the decoded audio signal. */ FLAC__STREAM_ENCODER_INVALID_CALLBACK, /**< The encoder was initialized before setting all the required callbacks. */ FLAC__STREAM_ENCODER_INVALID_NUMBER_OF_CHANNELS, /**< The encoder has an invalid setting for number of channels. */ FLAC__STREAM_ENCODER_INVALID_BITS_PER_SAMPLE, /**< The encoder has an invalid setting for bits-per-sample. * FLAC supports 4-32 bps but the reference encoder currently supports * only up to 24 bps. */ FLAC__STREAM_ENCODER_INVALID_SAMPLE_RATE, /**< The encoder has an invalid setting for the input sample rate. */ FLAC__STREAM_ENCODER_INVALID_BLOCK_SIZE, /**< The encoder has an invalid setting for the block size. */ FLAC__STREAM_ENCODER_INVALID_MAX_LPC_ORDER, /**< The encoder has an invalid setting for the maximum LPC order. */ FLAC__STREAM_ENCODER_INVALID_QLP_COEFF_PRECISION, /**< The encoder has an invalid setting for the precision of the quantized linear predictor coefficients. */ FLAC__STREAM_ENCODER_MID_SIDE_CHANNELS_MISMATCH, /**< Mid/side coding was specified but the number of channels is not equal to 2. */ FLAC__STREAM_ENCODER_MID_SIDE_SAMPLE_SIZE_MISMATCH, /**< Deprecated. */ FLAC__STREAM_ENCODER_ILLEGAL_MID_SIDE_FORCE, /**< Loose mid/side coding was specified but mid/side coding was not. */ FLAC__STREAM_ENCODER_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER, /**< The specified block size is less than the maximum LPC order. */ FLAC__STREAM_ENCODER_NOT_STREAMABLE, /**< The encoder is bound to the "streamable subset" but other settings violate it. */ FLAC__STREAM_ENCODER_FRAMING_ERROR, /**< An error occurred while writing the stream; usually, the write_callback returned an error. */ FLAC__STREAM_ENCODER_INVALID_METADATA, /**< The metadata input to the encoder is invalid, in one of the following ways: * - FLAC__stream_encoder_set_metadata() was called with a null pointer but a block count > 0 * - One of the metadata blocks contains an undefined type * - It contains an illegal CUESHEET as checked by FLAC__format_cuesheet_is_legal() * - It contains an illegal SEEKTABLE as checked by FLAC__format_seektable_is_legal() * - It contains more than one SEEKTABLE block or more than one VORBIS_COMMENT block */ FLAC__STREAM_ENCODER_FATAL_ERROR_WHILE_ENCODING, /**< An error occurred while writing the stream; usually, the write_callback returned an error. */ FLAC__STREAM_ENCODER_FATAL_ERROR_WHILE_WRITING, /**< The write_callback returned an error. */ FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR, /**< Memory allocation failed. */ FLAC__STREAM_ENCODER_ALREADY_INITIALIZED, /**< FLAC__stream_encoder_init() was called when the encoder was * already initialized, usually because * FLAC__stream_encoder_finish() was not called. */ FLAC__STREAM_ENCODER_UNINITIALIZED /**< The encoder is in the uninitialized state. */ } FLAC__StreamEncoderState; /** Maps a FLAC__StreamEncoderState to a C string. * * Using a FLAC__StreamEncoderState as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderStateString[]; /** Return values for the FLAC__StreamEncoder write callback. */ typedef enum { FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0, /**< The write was OK and encoding can continue. */ FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR /**< An unrecoverable error occurred. The encoder will return from the process call. */ } FLAC__StreamEncoderWriteStatus; /** Maps a FLAC__StreamEncoderWriteStatus to a C string. * * Using a FLAC__StreamEncoderWriteStatus as the index to this array * will give the string equivalent. The contents should not be modified. */ extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[]; /*********************************************************************** * * class FLAC__StreamEncoder * ***********************************************************************/ struct FLAC__StreamEncoderProtected; struct FLAC__StreamEncoderPrivate; /** The opaque structure definition for the stream encoder type. * See the \link flac_stream_encoder stream encoder module \endlink * for a detailed description. */ typedef struct { struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */ struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */ } FLAC__StreamEncoder; /** Signature for the write callback. * See FLAC__stream_encoder_set_write_callback() for more info. * * \param encoder The encoder instance calling the callback. * \param buffer An array of encoded data of length \a bytes. * \param bytes The byte length of \a buffer. * \param samples The number of samples encoded by \a buffer. * \c 0 has a special meaning; see * FLAC__stream_encoder_set_write_callback(). * \param current_frame The number of the current frame being encoded. * \param client_data The callee's client data set through * FLAC__stream_encoder_set_client_data(). * \retval FLAC__StreamEncoderWriteStatus * The callee's return status. */ typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data); /** Signature for the metadata callback. * See FLAC__stream_encoder_set_metadata_callback() for more info. * * \param encoder The encoder instance calling the callback. * \param metadata The final populated STREAMINFO block. * \param client_data The callee's client data set through * FLAC__stream_encoder_set_client_data(). */ typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data); /*********************************************************************** * * Class constructor/destructor * ***********************************************************************/ /** Create a new stream encoder instance. The instance is created with * default settings; see the individual FLAC__stream_encoder_set_*() * functions for each setting's default. * * \retval FLAC__StreamEncoder* * \c NULL if there was an error allocating memory, else the new instance. */ FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(); /** Free an encoder instance. Deletes the object pointed to by \a encoder. * * \param encoder A pointer to an existing encoder. * \assert * \code encoder != NULL \endcode */ FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder); /*********************************************************************** * * Public class method prototypes * ***********************************************************************/ /** Set the "verify" flag. If \c true, the encoder will verify it's own * encoded output by feeding it through an internal decoder and comparing * the original signal against the decoded signal. If a mismatch occurs, * the process call will return \c false. Note that this will slow the * encoding process by the extra time required for decoding and comparison. * * \default \c false * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set the "streamable subset" flag. If \c true, the encoder will comply * with the subset (see the format specification) and will check the * settings during FLAC__stream_encoder_init() to see if all settings * comply. If \c false, the settings may take advantage of the full * range that the format allows. * * Make sure you know what it entails before setting this to \c false. * * \default \c true * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set to \c true to enable mid-side encoding on stereo input. The * number of channels must be 2. Set to \c false to use only * independent channel coding. * * \default \c false * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set to \c true to enable adaptive switching between mid-side and * left-right encoding on stereo input. The number of channels must * be 2. Set to \c false to use exhaustive searching. In either * case, the mid/side stereo setting must be \c true. * * \default \c false * \param encoder An encoder instance to set. * \param value Flag value (see above). * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set the number of channels to be encoded. * * \default \c 2 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value); /** Set the sample resolution of the input to be encoded. * * \warning * Do not feed the encoder data that is wider than the value you * set here or you will generate an invalid stream. * * \default \c 16 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value); /** Set the sample rate (in Hz) of the input to be encoded. * * \default \c 44100 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value); /** Set the blocksize to use while encoding. * * \default \c 1152 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value); /** Set the maximum LPC order, or \c 0 to use only the fixed predictors. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value); /** Set the precision, in bits, of the quantized linear predictor * coefficients, or \c 0 to let the encoder select it based on the * blocksize. * * \note * In the current implementation, qlp_coeff_precision + bits_per_sample must * be less than 32. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value); /** Set to \c false to use only the specified quantized linear predictor * coefficient precision, or \c true to search neighboring precision * values and use the best one. * * \default \c false * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Deprecated. Setting this value has no effect. * * \default \c false * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set to \c false to let the encoder estimate the best model order * based on the residual signal energy, or \c true to force the * encoder to evaluate all order models and select the best. * * \default \c false * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value); /** Set the minimum partition order to search when coding the residual. * This is used in tandem with * FLAC__stream_encoder_set_max_residual_partition_order(). * * The partition order determines the context size in the residual. * The context size will be approximately blocksize / (2 ^ order). * * Set both min and max values to \c 0 to force a single context, * whose Rice parameter is based on the residual signal variance. * Otherwise, set a min and max order, and the encoder will search * all orders, using the mean of each context for its Rice parameter, * and use the best. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value); /** Set the maximum partition order to search when coding the residual. * This is used in tandem with * FLAC__stream_encoder_set_min_residual_partition_order(). * * The partition order determines the context size in the residual. * The context size will be approximately blocksize / (2 ^ order). * * Set both min and max values to \c 0 to force a single context, * whose Rice parameter is based on the residual signal variance. * Otherwise, set a min and max order, and the encoder will search * all orders, using the mean of each context for its Rice parameter, * and use the best. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value); /** Deprecated. Setting this value has no effect. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value); /** Set an estimate of the total samples that will be encoded. * This is merely an estimate and may be set to \c 0 if unknown. * This value will be written to the STREAMINFO block before encoding, * and can remove the need for the caller to rewrite the value later * if the value is known before encoding. * * \default \c 0 * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value); /** Set the metadata blocks to be emitted to the stream before encoding. * A value of \c NULL, \c 0 implies no metadata; otherwise, supply an * array of pointers to metadata blocks. The array is non-const since * the encoder may need to change the \a is_last flag inside them. * Otherwise, the encoder will not modify or free the blocks. It is up * to the caller to free the metadata blocks after encoding. * * \note * The encoder stores only the \a metadata pointer; the passed-in array * must survive at least until after FLAC__stream_encoder_init() returns. * Do not modify the array or free the blocks until then. * * \note * The STREAMINFO block is always written and no STREAMINFO block may * occur in the supplied array. * * \note * By default the encoder does not create a SEEKTABLE. If one is supplied * in the \a metadata array it will be written verbatim. However by itself * this is not very useful as the user will not know the stream offsets for * the seekpoints ahead of time. You must use the seekable stream encoder * to generate a legal seektable * (see FLAC__seekable_stream_encoder_set_metadata()) * * \note * A VORBIS_COMMENT block may be supplied. The vendor string in it * will be ignored. libFLAC will use it's own vendor string. libFLAC * will not modify the passed-in VORBIS_COMMENT's vendor string, it * will simply write it's own into the stream. If no VORBIS_COMMENT * block is present in the \a metadata array, libFLAC will write an * empty one, containing only the vendor string. * * \default \c NULL, 0 * \param encoder An encoder instance to set. * \param metadata See above. * \param num_blocks See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks); /** Set the write callback. * The supplied function will be called by the encoder anytime there is raw * encoded data ready to write. It may include metadata mixed with encoded * audio frames and the data is not guaranteed to be aligned on frame or * metadata block boundaries. * * The only duty of the callback is to write out the \a bytes worth of data * in \a buffer to the current position in the output stream. The arguments * \a samples and \a current_frame are purely informational. If \a samples * is greater than \c 0, then \a current_frame will hold the current frame * number that is being written; otherwise, the write callback is being called * to write metadata. * * \note * The callback is mandatory and must be set before initialization. * * \default \c NULL * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \code value != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_write_callback(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderWriteCallback value); /** Set the metadata callback. * The supplied function will be called once at the end of encoding with * the populated STREAMINFO structure. This is so file encoders can seek * back to the beginning of the file and write the STREAMINFO block with * the correct statistics after encoding (like minimum/maximum frame size * and total samples). * * \note * The callback is mandatory and must be set before initialization. * * \default \c NULL * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \code value != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata_callback(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderMetadataCallback value); /** Set the client data to be passed back to callbacks. * This value will be supplied to callbacks in their \a client_data * argument. * * \default \c NULL * \param encoder An encoder instance to set. * \param value See above. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * \c false if the encoder is already initialized, else \c true. */ FLAC_API FLAC__bool FLAC__stream_encoder_set_client_data(FLAC__StreamEncoder *encoder, void *value); /** Get the current encoder state. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__StreamEncoderState * The current encoder state. */ FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder); /** Get the state of the verify stream decoder. * Useful when the stream encoder state is * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__StreamDecoderState * The verify stream decoder state. */ FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder); /** Get the current encoder state as a C string. * This version automatically resolves * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR by getting the * verify decoder's state. * * \param encoder A encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval const char * * The encoder state as a C string. Do not modify the contents. */ FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder); /** Get relevant values about the nature of a verify decoder error. * Useful when the stream encoder state is * \c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR. The arguments should * be addresses in which the stats will be returned, or NULL if value * is not desired. * * \param encoder An encoder instance to query. * \param absolute_sample The absolute sample number of the mismatch. * \param frame_number The number of the frame in which the mismatch occurred. * \param channel The channel in which the mismatch occurred. * \param sample The number of the sample (relative to the frame) in * which the mismatch occurred. * \param expected The expected value for the sample in question. * \param got The actual value returned by the decoder. * \assert * \code encoder != NULL \endcode */ FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got); /** Get the "verify" flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_verify(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder); /** Get the "streamable subset" flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_streamable_subset(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder); /** Get the "mid/side stereo coding" flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_get_do_mid_side_stereo(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder); /** Get the "adaptive mid/side switching" flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_loose_mid_side_stereo(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder); /** Get the number of input channels being processed. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_channels(). */ FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder); /** Get the input sample resolution setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_bits_per_sample(). */ FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder); /** Get the input sample rate setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_sample_rate(). */ FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder); /** Get the blocksize setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_blocksize(). */ FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder); /** Get the maximum LPC order setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_max_lpc_order(). */ FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder); /** Get the quantized linear predictor coefficient precision setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_qlp_coeff_precision(). */ FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder); /** Get the qlp coefficient precision search flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_do_qlp_coeff_prec_search(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder); /** Get the "escape coding" flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_do_escape_coding(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder); /** Get the exhaustive model search flag. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval FLAC__bool * See FLAC__stream_encoder_set_do_exhaustive_model_search(). */ FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder); /** Get the minimum residual partition order setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_min_residual_partition_order(). */ FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder); /** Get maximum residual partition order setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_max_residual_partition_order(). */ FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder); /** Get the Rice parameter search distance setting. * * \param encoder An encoder instance to query. * \assert * \code encoder != NULL \endcode * \retval unsigned * See FLAC__stream_encoder_set_rice_parameter_search_dist(). */ FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder); /** Get the previously set estimate of the total samples to be encoded. * The encoder merely mimics back the value given to * FLAC__stream_encoder_set_total_samples_estimate() since it has no * other way of knowing how many samples the user will encode. * * \param encoder An encoder instance to set. * \assert * \code encoder != NULL \endcode * \retval FLAC__uint64 * See FLAC__stream_encoder_get_total_samples_estimate(). */ FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder); /** Initialize the encoder instance. * Should be called after FLAC__stream_encoder_new() and * FLAC__stream_encoder_set_*() but before FLAC__stream_encoder_process() * or FLAC__stream_encoder_process_interleaved(). Will set and return * the encoder state, which will be FLAC__STREAM_ENCODER_OK if * initialization succeeded. * * The call to FLAC__stream_encoder_init() currently will also immediately * call the write callback several times, once with the \c fLaC signature, * and once for each encoded metadata block. * * \param encoder An uninitialized encoder instance. * \assert * \code encoder != NULL \endcode * \retval FLAC__StreamEncoderState * \c FLAC__STREAM_ENCODER_OK if initialization was successful; see * FLAC__StreamEncoderState for the meanings of other return values. */ FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_init(FLAC__StreamEncoder *encoder); /** Finish the encoding process. * Flushes the encoding buffer, releases resources, resets the encoder * settings to their defaults, and returns the encoder state to * FLAC__STREAM_ENCODER_UNINITIALIZED. Note that this can generate * one or more write callbacks before returning, and will generate * a metadata callback. * * In the event of a prematurely-terminated encode, it is not strictly * necessary to call this immediately before FLAC__stream_encoder_delete() * but it is good practice to match every FLAC__stream_encoder_init() * with a FLAC__stream_encoder_finish(). * * \param encoder An uninitialized encoder instance. * \assert * \code encoder != NULL \endcode */ FLAC_API void FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder); /** Submit data for encoding. * This version allows you to supply the input data via an array of * pointers, each pointer pointing to an array of \a samples samples * representing one channel. The samples need not be block-aligned, * but each channel should have the same number of samples. * * \param encoder An initialized encoder instance in the OK state. * \param buffer An array of pointers to each channel's signal. * \param samples The number of samples in one channel. * \assert * \code encoder != NULL \endcode * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode * \retval FLAC__bool * \c true if successful, else \c false; in this case, check the * encoder state with FLAC__stream_encoder_get_state() to see what * went wrong. */ FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples); /** Submit data for encoding. * This version allows you to supply the input data where the channels * are interleaved into a single array (i.e. channel0_sample0, * channel1_sample0, ... , channelN_sample0, channel0_sample1, ...). * The samples need not be block-aligned but they must be * sample-aligned, i.e. the first value should be channel0_sample0 * and the last value channelN_sampleM. * * \param encoder An initialized encoder instance in the OK state. * \param buffer An array of channel-interleaved data (see above). * \param samples The number of samples in one channel, the same as for * FLAC__stream_encoder_process(). For example, if * encoding two channels, \c 1000 \a samples corresponds * to a \a buffer of 2000 values. * \assert * \code encoder != NULL \endcode * \code FLAC__stream_encoder_get_state(encoder) == FLAC__STREAM_ENCODER_OK \endcode * \retval FLAC__bool * \c true if successful, else \c false; in this case, check the * encoder state with FLAC__stream_encoder_get_state() to see what * went wrong. */ FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples); /* \} */ #ifdef __cplusplus } #endif #endif str">"3319.6"> <stop offset="0" stop-color="#FFC100" id="stop1624" /> <stop offset="0.6" stop-color="#997200" id="stop1626" /> <stop offset="1" stop-color="#332201" id="stop1628" /> </linearGradient> </defs> <path fill="#000000" d="M875.45 3825.1l7249.1 0 0 -2244.3 -7249.1 0 0 2244.3z" id="path1630" /> <path fill="#FFFFFF" d="M1333.89 3695.16c0,-31.54 -25.56,-57.1 -57.09,-57.1 -31.53,0 -57.09,25.56 -57.09,57.1 0,31.52 25.56,57.09 57.09,57.09 31.53,0 57.09,-25.57 57.09,-57.09zm179.32 -47.8c22.95,-15.62 53.43,-11.19 71.41,10.35 18,21.54 18,53.62 0,75.18 -17.98,21.54 -48.46,25.95 -71.41,10.34l0 47.31 -30.24 0 0 -149.7 30.24 0 0 6.52zm345.25 47.79c0,-31.54 -25.56,-57.09 -57.09,-57.09 -31.52,0 -57.08,25.55 -57.08,57.09 0,31.53 25.56,57.09 57.08,57.09 16.25,0 30.93,-6.79 41.32,-17.69l-21.85 -20.84 21.85 20.84 -21.85 -20.84c-5.59,5.87 -13.55,8.9 -21.66,8.24 -8.09,-0.69 -15.45,-4.98 -20.01,-11.69l77.28 0c1.32,-4.82 2.01,-9.88 2.01,-15.11zm1896.14 0c0,-31.54 -25.56,-57.09 -57.1,-57.09 -31.51,0 -57.08,25.55 -57.08,57.09 0,31.53 25.57,57.09 57.08,57.09 16.26,0 30.93,-6.79 41.33,-17.69l-21.84 -20.84 21.84 20.84 -21.84 -20.84c-5.61,5.87 -13.57,8.9 -21.67,8.24 -8.1,-0.69 -15.46,-4.98 -20.02,-11.69l77.29 0c1.32,-4.82 2.01,-9.88 2.01,-15.11zm1128.28 0c0,-31.54 -25.56,-57.09 -57.08,-57.09 -31.53,0 -57.08,25.55 -57.08,57.09 0,31.53 25.55,57.09 57.08,57.09 16.25,0 30.92,-6.79 41.32,-17.69l-21.85 -20.84 21.85 20.84 -21.85 -20.84c-5.61,5.87 -13.56,8.9 -21.66,8.24 -8.08,-0.69 -15.44,-4.98 -20.01,-11.69l77.28 0c1.32,-4.82 2,-9.88 2,-15.11zm2883.6 0c0,-31.54 -25.56,-57.09 -57.08,-57.09 -31.53,0 -57.09,25.55 -57.09,57.09 0,31.53 25.56,57.09 57.09,57.09 16.24,0 30.92,-6.79 41.31,-17.69l-21.85 -20.84 21.85 20.84 -21.85 -20.84c-5.59,5.87 -13.55,8.9 -21.66,8.24 -8.08,-0.69 -15.44,-4.98 -20.01,-11.69l77.28 0c1.32,-4.82 2.01,-9.88 2.01,-15.11zm-5660.49 -8.49c0,-18.27 -8.91,-35.01 -23.06,-43.31 -14.14,-8.29 -31.13,-6.74 -43.96,4.01l0 -6.52 -30.24 0 0 108.93 30.24 0 0 -63.11c0,-10.16 8.22,-18.38 18.38,-18.38 10.16,0 18.39,8.22 18.39,18.38l0 63.11 30.25 0 0 -63.11zm437.24 -14.09c0,-14.47 -10.9,-27.39 -27.31,-32.39 -16.4,-4.98 -34.82,-0.99 -46.13,10.03 -11.32,11.02 -13.14,26.71 -4.56,39.3 4.34,6.08 10.52,10.54 17.62,12.76 8.04,2.71 16.25,4.9 24.57,6.57 6.82,1.33 10.41,4.73 8.42,7.96 -1.98,3.22 -8.96,5.3 -16.32,4.84 -7.35,-0.46 -12.83,-3.3 -12.83,-6.64l0 -3.23 -30.21 0 0 3.23c0,16.03 12.23,30.29 30.43,35.5 18.2,5.21 38.37,0.22 50.18,-12.45 11.83,-12.64 12.7,-30.17 2.18,-43.59 -6.1,-7.12 -14.48,-11.87 -23.72,-13.42 -7.3,-1.36 -14.52,-3.13 -21.63,-5.27 -3.94,-1.31 -5,-3.46 -2.54,-5.2 2.46,-1.75 7.79,-2.65 12.91,-2.16 5.12,0.46 8.73,2.18 8.73,4.16l0 1.5 30.21 0 0 -1.5zm263.01 22.59c0,-31.54 -25.56,-57.1 -57.09,-57.1 -31.53,0 -57.09,25.56 -57.09,57.1 0,31.52 25.56,57.09 57.09,57.09 31.53,0 57.09,-25.57 57.09,-57.09zm149.73 8.78l0 -63.1 30.23 0 0 63.1c0,10.15 8.25,18.39 18.4,18.39 10.15,0 18.38,-8.24 18.38,-18.39l0 -63.1 30.24 0 0 108.93 -30.24 0 0 -6.54c-12.83,10.76 -29.81,12.31 -43.96,4.01 -14.14,-8.28 -23.05,-25.01 -23.05,-43.3zm279.74 -56.58l0 -6.52 -30.24 0 0 108.93 30.24 0 0 -54.61c0,-7.14 2.84,-13.97 7.87,-19.02 5.05,-5.03 11.89,-7.86 19,-7.86l0 -30.12c-9.57,0.56 -18.83,3.74 -26.87,9.2zm266.04 8.38c-10.39,-10.88 -25.07,-17.68 -41.32,-17.68 -31.51,0 -57.07,25.54 -57.07,57.08 0,0 0,0 0,0.01 0,31.52 25.56,57.08 57.07,57.08 16.25,0 30.93,-6.8 41.32,-17.7l-21.86 -20.83c-4.88,5.11 -11.79,8.32 -19.43,8.32 -14.83,0 -26.87,-12.04 -26.88,-26.87 0,-0.01 0,-0.01 0,-0.01 0.01,-14.84 12.05,-26.86 26.88,-26.86 7.64,0 14.55,3.19 19.43,8.3l21.86 -20.84zm3499.75 39.33l-15.58 -54.23 -26.99 0 -15.58 54.23 -15.58 -54.23 -31.45 0 31.3 108.93 31.44 0 13.36 -46.5 13.37 46.5 31.43 0 31.31 -108.93 -31.44 0 -15.59 54.23m-767.53 -89.7l-30.23 0 0 30.21 30.23 0 0 -30.21m0 35.47l-30.23 0 0 108.93 30.23 0 0 -108.93m-626.55 54.51l33.66 54.42 -35.61 0 -15.84 -25.64 -15.87 25.64 -35.59 0 33.65 -54.42 -33.71 -54.51 35.6 0 15.92 25.73 15.91 -25.73 35.6 0 -33.72 54.51m-1012.87 -54.51l-27.71 44.82 0 -80.29 -30.25 0 0 144.4 30.25 0 0 -45.43 34.06 45.43 37.76 0 -41.57 -55.46 33.07 -53.47 -35.61 0m-460.66 -35.47l-30.24 0 0 30.21 30.24 0 0 -30.21m0 149.71l0 -114.24 -30.24 0 0 114.27c0,2.89 -2.34,5.22 -5.22,5.22l-8.56 0 0 30.21 8.56 0c19.59,0 35.46,-15.89 35.46,-35.46m1273.22 -59.92c0,-31.54 -25.56,-57.1 -57.09,-57.1 -31.52,0 -57.08,25.56 -57.08,57.1 0,31.52 25.56,57.09 57.08,57.09 31.53,0 57.09,-25.57 57.09,-57.09zm-1052.95 48.07l0 6.54 30.23 0 0 -108.93 -30.23 0 0 63.1c0,10.15 -8.24,18.39 -18.39,18.39 -10.16,0 -18.39,-8.24 -18.39,-18.39l0 -63.1 -30.24 0 0 63.1c0,18.29 8.89,35.02 23.04,43.3 14.16,8.3 31.14,6.75 43.98,-4.01zm707.46 -95.87l0 -41.99 -30.23 0 0 144.4 30.23 0 0 -6.54c22.95,15.61 53.43,11.2 71.42,-10.34 17.99,-21.56 17.99,-53.63 0,-75.18 -17.99,-21.54 -48.47,-25.97 -71.42,-10.35zm992.23 -11.78l-25.1 0c-0.66,-0.06 -1.32,0.18 -1.81,0.67 -0.48,0.47 -0.72,1.13 -0.66,1.81l0 2.78 0 0 13.79 0 0 30.22 -13.79 0 0 78.71 -30.24 0 0 -78.71 -13.79 0 0 -30.22 13.79 0c0,-19.59 15.88,-35.47 35.46,-35.47l22.35 0 0 30.21zm390.01 2.58l0 30.12c-7.13,0 -13.97,2.83 -19.01,7.86 -5.05,5.05 -7.87,11.88 -7.87,19.02l0 54.61 -30.25 0 0 -108.93 30.25 0 0 6.52c8.03,-5.46 17.29,-8.64 26.88,-9.2zm177.25 9.2l0 -6.52 -30.24 0 0 108.93 30.24 0 0 -63.11c0,-10.16 8.24,-18.38 18.4,-18.38 10.15,0 18.38,8.22 18.38,18.38l0 63.11 30.24 0 0 -63.11c0,-10.16 8.24,-18.38 18.4,-18.38 10.15,0 18.39,8.22 18.39,18.38l0 63.11 30.23 0 -0.01 -63.11c0,-19.18 -11.27,-36.57 -28.78,-44.38 -17.51,-7.83 -38.01,-4.63 -52.28,8.17 -14.83,-15.27 -36.89,-16.56 -52.97,-3.09zm646.89 0l0 -6.52 30.26 0 0 108.93 -30.26 0 0 -6.54c-22.94,15.61 -53.41,11.2 -71.39,-10.34 -17.99,-21.56 -17.99,-53.63 0,-75.18 17.98,-21.54 48.45,-25.97 71.39,-10.35zm243.81 -9.2l0 30.12c-7.12,0 -13.96,2.83 -19.01,7.86 -5.03,5.05 -7.87,11.88 -7.87,19.02l0 54.61 -30.23 0 0 -108.93 30.23 0 0 6.52c8.03,-5.46 17.31,-8.64 26.88,-9.2z" id="path1632" /> <path fill="#000000" d="M1303.67 3695.16c0,-14.85 -12.02,-26.88 -26.87,-26.88 -14.84,0 -26.89,12.03 -26.89,26.88 0,14.84 12.05,26.88 26.89,26.88 14.85,0 26.87,-12.04 26.87,-26.88zm3499.91 -15.11l44.46 0c-5,-7.37 -13.32,-11.77 -22.23,-11.77 -8.9,0 -17.23,4.4 -22.23,11.77m-1128.28 0l44.47 0c-5.01,-7.37 -13.33,-11.77 -22.23,-11.77 -8.91,0 -17.22,4.4 -22.24,11.77m-899.27 15.11c0,-14.85 -12.03,-26.88 -26.88,-26.88 -14.84,0 -26.87,12.03 -26.87,26.88 0,14.84 12.03,26.88 26.87,26.88 14.85,0 26.88,-12.04 26.88,-26.88zm2600.88 0c0,-14.85 -12.04,-26.88 -26.89,-26.88 -14.85,0 -26.87,12.03 -26.87,26.88 0,14.84 12.02,26.88 26.87,26.88 14.85,0 26.89,-12.04 26.89,-26.88zm-261.53 0c0,-14.85 -12.03,-26.88 -26.88,-26.88 -14.84,0 -26.88,12.03 -26.88,26.88 0,14.84 12.04,26.88 26.88,26.88 14.85,0 26.88,-12.04 26.88,-26.88zm-3548.42 0.29c0,-14.85 -12.02,-26.88 -26.88,-26.88 -14.83,0 -26.87,12.03 -26.87,26.88 0,14.84 12.04,26.88 26.87,26.88 14.86,0 26.88,-12.04 26.88,-26.88zm212.21 -15.4l44.47 0c-5.01,-7.37 -13.34,-11.77 -22.24,-11.77 -8.9,0 -17.23,4.4 -22.23,11.77m5908 0l44.47 0c-5,-7.37 -13.33,-11.77 -22.23,-11.77 -8.91,0 -17.23,4.4 -22.24,11.77m-419.17 15.11c0,-14.85 -12.02,-26.88 -26.86,-26.88 -14.85,0 -26.88,12.03 -26.88,26.88 0,14.84 12.03,26.88 26.88,26.88 14.84,0 26.86,-12.04 26.86,-26.88z" id="path1634" /> <path fill="#FFC000" d="M918.37 1633.25l7156.1 0 0 1906.25 -7156.1 0 0 -1906.25" id="path1636" /> <path fill="url(#id1)" d="M6542.59 3424.95l0 0m1512.67 -313.2l19.21 0 0 10.92 -8.28 0 0 43.65 -10.93 0 0 -54.57m-54.55 0l32.74 0 0 10.92 -32.74 0 0 -10.92m0 43.64l32.74 0 0 10.93 -32.74 0 0 -10.93m-76.4 -43.64l0 0 0 0 0 0 0 0m21.83 10.92l10.91 0 0 43.65 -10.91 0 0 -43.65m10.91 -10.92l10.92 0 0 10.92 -10.92 0 0 -10.92m10.92 10.92l10.92 0 0 43.65 -10.92 0 0 -43.65m-43.66 -10.92l21.83 0 0 10.92 -10.92 0 0 43.65 -10.91 0 0 -54.57m-21.83 -10.92l10.92 0 0 21.84 -10.92 0 0 -21.84m0 32.74l10.92 0 0 21.82 -10.92 0 0 -21.82m-87.3 -21.82l10.92 0 0 21.82 -10.92 0 0 -21.82m-78.14 0l10.91 0 0 10.92 -10.91 0 0 -10.92m-32.74 21.82l10.92 0 0 21.82 -10.92 0 0 -21.82m-42 21.82l42 0 0 10.93 -42 0 0 -10.93m-43.65 -32.72l10.91 0 0 10.9 -10.91 0 0 -10.9m-10.91 -32.75l32.74 0 0 10.91 -32.74 0 0 -10.91m0 65.47l32.74 0 0 10.93 -32.74 0 0 -10.93m-54.57 -65.47l21.83 0 0 10.91 -21.83 0 0 -10.91m-10.91 10.91l10.91 0 0 10.92 -10.91 0 0 -10.92m32.74 32.74l10.91 0 0 21.82 -10.91 0 0 -21.82m294.75 -140.69l43.65 0 0 10.93 -43.65 0 0 -10.93m-10.91 10.93l10.91 0 0 10.9 -10.91 0 0 -10.9m10.91 10.9l32.73 0 0 10.92 -32.73 0 0 -10.92m32.73 10.92l10.92 0 0 10.9 -10.92 0 0 -10.9m-43.64 10.9l43.64 0 0 10.92 -43.64 0 0 -10.92m65.47 -43.65l10.91 0 0 43.65 -10.91 0 0 -43.65m10.91 65.48l32.75 0 0 10.92 -32.75 0 0 -10.92m54.57 -21.83l43.66 0 0 10.92 -43.66 0 0 -10.92m43.66 -10.9l10.91 0 0 10.9 -10.91 0 0 -10.9m-32.74 -10.92l32.74 0 0 10.92 -32.74 0 0 -10.92m-10.92 -10.9l10.92 0 0 10.9 -10.92 0 0 -10.9m10.92 -10.93l43.65 0 0 10.93 -43.65 0 0 -10.93m-130.96 237.73l43.65 0 0 10.91 -43.65 0 0 -10.91m-10.91 10.91l10.91 0 0 10.91 -10.91 0 0 -10.91m10.91 10.91l32.73 0 0 10.92 -32.73 0 0 -10.92m32.73 10.92l10.92 0 0 10.93 -10.92 0 0 -10.93m-43.64 10.93l43.64 0 0 10.9 -43.64 0 0 -10.9m-262.32 0l43.65 0 0 10.9 -43.65 0 0 -10.9m43.65 -10.93l10.9 0 0 10.93 -10.9 0 0 -10.93m-32.75 -10.92l32.75 0 0 10.92 -32.75 0 0 -10.92m-10.9 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 -10.91l43.65 0 0 10.91 -43.65 0 0 -10.91m-328.02 118.87l43.66 0 0 10.91 -43.66 0 0 -10.91m-10.9 10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 10.91l32.74 0 0 10.92 -32.74 0 0 -10.92m32.74 10.92l10.92 0 0 10.91 -10.92 0 0 -10.91m-43.64 10.91l43.64 0 0 10.91 -43.64 0 0 -10.91m-724.99 0l43.64 0 0 10.91 -43.64 0 0 -10.91m43.64 -10.91l10.91 0 0 10.91 -10.91 0 0 -10.91m-32.74 -10.92l32.74 0 0 10.92 -32.74 0 0 -10.92m-10.9 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 -10.91l43.65 0 0 10.91 -43.65 0 0 -10.91m1173.46 0l21.83 0 0 10.91 -10.91 0 0 43.65 -10.92 0 0 -54.56m43.66 10.91l10.91 0 0 43.65 -10.91 0 0 -43.65m-10.92 -10.91l10.92 0 0 10.91 -10.92 0 0 -10.91m-10.91 10.91l10.91 0 0 43.65 -10.91 0 0 -43.65m-21.83 -10.91l0 0 0 0 0 0 0 0m-1051.63 0l0 0 0 0 0 0 0 0m21.83 10.91l10.92 0 0 43.65 -10.92 0 0 -43.65m10.92 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m10.9 10.91l10.92 0 0 43.65 -10.92 0 0 -43.65m-43.65 -10.91l21.83 0 0 10.91 -10.91 0 0 43.65 -10.92 0 0 -54.56m1291.73 -312.95l0 -43.65 10.92 0 0 65.48 -10.92 0 0 -10.91 -32.75 0 0 -10.92 32.75 0m-853.76 354.96l0 -43.67 10.93 0 0 65.49 -10.93 0 0 -10.92 -32.73 0 0 -10.9 32.73 0m-32.73 21.82l32.73 0 0 10.9 -32.73 0 0 -10.9m-10.91 -65.49l10.91 0 0 43.67 -10.91 0 0 -43.67m919.22 -225.15l10.92 0 0 10.9 32.74 0 0 -10.9 10.91 0 0 21.82 -43.65 0 0 10.9 -10.92 0 0 -32.72m-196.44 118.85l10.92 0 0 10.91 32.74 0 0 -10.91 10.9 0 0 21.83 -43.64 0 0 10.93 -10.92 0 0 -32.76m10.92 32.76l32.74 0 0 10.9 -32.74 0 0 -10.9m0 -43.67l32.74 0 0 10.91 -32.74 0 0 -10.91m-262.33 0l32.74 0 0 10.91 -32.74 0 0 -10.91m0 43.67l32.74 0 0 10.9 -32.74 0 0 -10.9m-10.91 -32.76l10.91 0 0 10.91 32.74 0 0 -10.91 10.91 0 0 21.83 -43.65 0 0 10.93 -10.91 0 0 -32.76m393.28 118.87l10.91 0 0 10.91 32.75 0 0 -10.91 10.92 0 0 21.83 -43.67 0 0 10.91 -10.91 0 0 -32.74m10.91 32.74l32.75 0 0 10.91 -32.75 0 0 -10.91m0 -43.65l32.75 0 0 10.91 -32.75 0 0 -10.91m130.97 0l8.28 0 0 10.91 -8.28 0 0 -10.91m0 43.65l8.28 0 0 10.91 -8.28 0 0 -10.91m-10.93 -32.74l10.93 0 0 10.91 8.28 0 0 0 0 0 0 10.92 -8.28 0 0 10.91 -10.93 0 0 -32.74m-1564.68 -10.91l32.74 0 0 10.91 -32.74 0 0 -10.91m0 43.65l32.74 0 0 10.91 -32.74 0 0 -10.91m-10.92 -32.74l10.92 0 0 10.91 32.74 0 0 -10.91 10.91 0 0 21.83 -43.65 0 0 10.91 -10.92 0 0 -32.74m140.22 21.83l21.82 0 0 20.17 -21.82 0 0 -20.17m1315.34 -151.61l32.75 0 0 10.91 -32.75 0 0 -10.91m-10.91 10.91l10.91 0 0 32.76 -10.91 0 0 -32.76m10.91 32.76l32.75 0 0 10.9 -32.75 0 0 -10.9m32.75 -10.93l10.92 0 0 10.93 -10.92 0 0 -10.93m32.74 -32.74l32.74 0 0 10.91 -32.74 0 0 -10.91m-10.92 32.74l10.92 0 0 10.93 -10.92 0 0 -10.93m-876.5 0l10.91 0 0 10.93 -10.91 0 0 -10.93m-32.74 10.93l32.74 0 0 10.9 -32.74 0 0 -10.9m-10.92 -32.76l10.92 0 0 32.76 -10.92 0 0 -32.76m10.92 -10.91l32.74 0 0 10.91 -32.74 0 0 -10.91m603.67 -21.83l10.92 0 0 10.92 -10.92 0 0 -10.92m65.48 43.65l10.91 0 0 10.92 -10.91 0 0 -10.92m-327.81 -21.82l21.83 0 0 10.91 -21.83 0 0 -10.91m21.83 10.91l10.92 0 0 43.66 -10.92 0 0 -43.66m-297.69 -10.91l31.09 0 0 10.91 -31.09 0 0 -10.91m-10.91 10.91l10.91 0 0 32.76 -10.91 0 0 -32.76m10.91 32.76l31.09 0 0 10.9 -31.09 0 0 -10.9m31.09 -32.76l10.91 0 0 32.76 -10.91 0 0 -32.76m526.25 118.87l10.91 0 0 32.74 -10.91 0 0 -32.74m-31.09 32.74l31.09 0 0 10.91 -31.09 0 0 -10.91m-10.91 -32.74l10.91 0 0 32.74 -10.91 0 0 -32.74m10.91 -10.91l31.09 0 0 10.91 -31.09 0 0 -10.91m-272.22 -118.87l10.92 0 0 10.91 10.91 0 0 10.91 -10.91 0 0 32.75 -10.92 0 0 -54.57m655.2 0l10.93 0 0 10.91 8.28 0 0 10.91 -8.28 0 0 32.75 -10.93 0 0 -54.57m-535.15 54.57l-10.9 0 0 -10.9 -10.92 0 0 -10.93 10.92 0 0 -32.74 10.9 0 0 54.57m-43.65 -10.9l-10.91 0 0 -43.67 10.91 0 0 43.67m21.83 10.9l-21.83 0 0 -10.9 21.83 0 0 10.9m-294.66 -54.57l10.92 0 0 10.91 10.91 0 0 10.91 -10.91 0 0 32.75 -10.92 0 0 -54.57m43.65 10.91l10.91 0 0 43.66 -10.91 0 0 -43.66m-21.82 -10.91l21.82 0 0 10.91 -21.82 0 0 -10.91m326.77 118.87l21.82 0 0 10.91 -21.82 0 0 -10.91m21.82 10.91l10.92 0 0 43.65 -10.92 0 0 -43.65m-43.65 -10.91l10.93 0 0 10.91 10.9 0 0 10.91 -10.9 0 0 32.74 -10.93 0 0 -54.56m361.17 54.56l-21.82 0 0 -10.91 21.82 0 0 10.91m-21.82 -10.91l-10.91 0 0 -43.65 10.91 0 0 43.65m43.65 10.91l-10.92 0 0 -10.91 -10.91 0 0 -10.91 10.91 0 0 -32.74 10.92 0 0 54.56m130.96 0l-10.91 0 0 -10.91 -10.91 0 0 -10.91 10.91 0 0 -32.74 10.91 0 0 54.56m-43.65 -10.91l-10.92 0 0 -43.65 10.92 0 0 43.65m21.83 10.91l-21.83 0 0 -10.91 21.83 0 0 10.91m10.91 -162.52l10.91 0 0 43.66 -43.65 0 0 -10.9 32.74 0 0 -10.93 -32.74 0 0 -10.92 32.74 0 0 -10.91m-524.87 118.87l10.91 0 0 43.65 -43.65 0 0 -10.91 32.74 0 0 -10.91 -32.74 0 0 -10.92 32.74 0 0 -10.91m-43.66 21.83l10.92 0 0 10.91 -10.92 0 0 -10.91m10.92 -32.74l32.74 0 0 10.91 -32.74 0 0 -10.91m-459.84 0l32.74 0 0 10.91 -32.74 0 0 -10.91m-10.92 32.74l10.92 0 0 10.91 -10.92 0 0 -10.91m43.66 -21.83l10.91 0 0 43.65 -43.65 0 0 -10.91 32.74 0 0 -10.91 -32.74 0 0 -10.92 32.74 0 0 -10.91m853.74 -270.47l-43.64 0 0 76.4 43.64 0 0 -10.93 -32.73 0 0 -21.82 32.73 0 0 -10.9 -32.73 0 0 -21.84 32.73 0 0 -10.91m-109.13 0l0 76.4 10.92 0 0 -54.57 10.91 0 0 -10.92 -10.91 0 0 -10.91 -10.92 0m54.56 0l0 76.4 -10.9 0 0 -54.57 -10.91 0 0 -10.92 10.91 0 0 -10.91 10.9 0m-89.04 0l10.91 0 0 43.65 10.92 0 0 10.92 -10.92 0 0 21.83 -10.91 0 0 -21.83 -32.74 0 0 -21.82 10.91 0 0 10.9 21.83 0 0 -21.82 -10.92 0 0 -10.92 10.92 0 0 -10.91m-96.57 0l0 10.91 31.09 0 0 10.92 10.91 0 0 -10.92 10.92 0 0 -10.91 -52.92 0m31.09 21.83l-10.91 0 0 10.92 -10.91 0 0 10.9 32.73 0 0 -10.9 -10.91 0 0 -10.92m-96.56 -10.92l0 54.56 10.91 0 0 -10.9 10.91 0 0 -10.92 -10.91 0 0 -32.74 -10.91 0m43.65 0l0 10.92 -10.92 0 0 10.92 10.92 0 0 32.72 10.91 0 0 -54.56 -10.91 0m-109.13 10.92l0 43.64 10.91 0 0 -21.82 32.74 0 0 -10.9 -32.74 0 0 -10.92 -10.91 0m10.91 43.64l32.74 0 0 10.93 -32.74 0 0 -10.93m-702.32 194.09l-10.92 0 0 10.91 -10.9 0 0 10.91 32.73 0 0 -10.91 -10.91 0 0 -10.91m-31.08 -21.83l0 10.91 31.08 0 0 10.92 10.91 0 0 -10.92 10.92 0 0 -10.91 -52.91 0m0 65.48l41.99 0 0 10.91 -41.99 0 0 -10.91m41.99 -21.83l10.92 0 0 21.83 -10.92 0 0 -21.83m877.02 -140.69l0 10.91 32.74 0 0 10.91 10.92 0 0 -10.91 10.91 0 0 -10.91 -54.57 0m10.92 32.74l10.91 0 0 10.93 32.74 0 0 10.9 -54.57 0 0 -10.9 10.92 0 0 -10.93m-65.48 -32.74l21.83 0 0 43.67 10.91 0 0 10.9 -32.74 0 0 -10.9 10.91 0 0 -32.76 -10.91 0 0 -10.91m-327.8 0l21.82 0 0 43.67 10.92 0 0 10.9 -32.74 0 0 -10.9 10.9 0 0 -32.76 -10.9 0 0 -10.91m10.9 -21.83l10.92 0 0 10.92 -10.92 0 0 -10.92m-131.58 118.87l10.92 0 0 10.91 -10.92 0 0 -10.91m-10.91 21.83l21.83 0 0 43.65 10.92 0 0 10.91 -32.75 0 0 -10.91 10.91 0 0 -32.74 -10.91 0 0 -10.91m98.84 -86.13l10.93 0 0 10.93 -10.93 0 0 -10.93m-10.9 10.93l10.9 0 0 10.9 -10.9 0 0 -10.9m-10.92 -65.5l10.92 0 0 21.83 10.9 0 0 10.91 -10.9 0 0 32.76 -10.92 0 0 -32.76 -10.91 0 0 -10.91 10.91 0 0 -21.83m64.86 118.87l10.9 0 0 21.83 10.93 0 0 10.91 -10.93 0 0 32.74 -10.9 0 0 -32.74 -10.93 0 0 -10.91 10.93 0 0 -21.83m10.9 65.48l10.93 0 0 10.91 -10.93 0 0 -10.91m10.93 -10.91l10.9 0 0 10.91 -10.9 0 0 -10.91m21.82 -32.74l10.91 0 0 10.91 10.91 0 0 10.91 -10.91 0 0 32.74 -10.91 0 0 -54.56m43.65 10.91l10.92 0 0 12.57 -10.92 0 0 -12.57m-21.83 -10.91l21.83 0 0 10.91 -21.83 0 0 -10.91m-274.31 -21.83l20.17 0 0 65.48 10.92 0 0 9.26 -31.09 0 0 -9.26 10.9 0 0 -54.57 -10.9 0 0 -10.91m-194.79 0l20.17 0 0 65.48 10.92 0 0 9.26 -31.09 0 0 -9.26 10.91 0 0 -54.57 -10.91 0 0 -10.91m654.63 21.83l21.82 0 0 10.91 -21.82 0 0 -10.91m-10.92 10.91l10.92 0 0 32.74 -10.92 0 0 -32.74m32.74 0l10.91 0 0 -32.74 10.92 0 0 74.74 -43.65 0 0 -9.26 32.73 0 0 -21.83 -10.91 0 0 -10.91m164.73 0l10.92 0 0 32.74 -10.92 0 0 -32.74m10.92 -10.91l21.83 0 0 10.91 -21.83 0 0 -10.91m21.83 10.91l10.91 0 0 -10.91 10.9 0 0 74.73 -10.9 0 0 -21.82 -32.74 0 0 -9.26 32.74 0 0 -21.83 -10.91 0 0 -10.91m-908.31 -10.91l-21.84 0 0 10.91 21.84 0 0 -10.91m-21.84 10.91l-10.91 0 0 -10.91 -10.91 0 0 74.73 10.91 0 0 -21.82 32.75 0 0 -9.26 -32.75 0 0 -21.83 10.91 0 0 -10.91m32.74 0l-10.9 0 0 32.74 10.9 0 0 -32.74m-132.4 0l-10.93 0 0 32.74 10.93 0 0 -32.74m-32.74 0l-10.91 0 0 -10.91 -10.93 0 0 74.73 10.93 0 0 -21.82 32.72 0 0 -9.26 -32.72 0 0 -21.83 10.91 0 0 -10.91m21.81 -10.91l-21.81 0 0 10.91 21.81 0 0 -10.91m-242.77 75.47l0 0" id="path1638" /> <path fill="#000000" d="M2772.69 2181.06c-98.54,-428.82 -353.71,-447.47 -413.71,-447.47l0 -25.08c133.05,0 348.1,94.96 426.25,420.85 100.11,-325.2 271.08,-412.49 391.07,-414.14 114.35,-1.58 184.87,25.07 293.24,81.53l0 -50.89 312.9 0 0 -42.89 25.07 0 0 42.89 53.05 0 0 25.07 -53.05 0 0 613.13 225.02 -568.78 215.58 0 18.78 -44.35 -268.62 0 0 -25.07 279.26 0 29.52 -69.67 23.08 9.79 -25.39 59.88 59.43 0 0 25.07 -70.05 0 -175.35 413.86 232.24 0 0 310.18c217.36,-106.98 477.4,-28.48 608.47,180.93 130.01,-200.39 383.99,-280.25 605.28,-190.31l-8.81 -14.24 374.02 0 74.73 120.8 72.97 -117.99c1.08,-1.75 2.98,-2.81 5.05,-2.81l0 0c2.14,0 4.12,1.16 5.15,3.04 1.06,1.88 1.01,4.17 -0.12,6l-76.09 123.02 9.74 15.76 89.7 -145.01c1.08,-1.75 2.98,-2.81 5.04,-2.81l0 0c2.15,0 4.13,1.16 5.17,3.04 1.05,1.88 0.99,4.17 -0.14,6l-92.8 150.04 9.75 15.77 108.15 -174.85 374.01 0 -295.16 477.2 9.76 15.76 311.43 -503.52 -388.55 0c-2.13,0 -4.12,-1.16 -5.17,-3.03 -1.04,-1.9 -0.99,-4.18 0.14,-6.01l0 0c1.09,-1.74 2.99,-2.8 5.03,-2.8l409.8 0 -309 499.6 289.06 467.36c1.14,1.84 1.19,4.13 0.15,6.01 -1.04,1.87 -3.03,3.03 -5.18,3.03 -2.05,0 -3.96,-1.06 -5.03,-2.8l-285.98 -462.35 -9.75 15.76 277.96 449.39 -374.01 0 -71.44 -115.5 -69.72 112.7c-1.08,1.74 -2.97,2.8 -5.04,2.8l0 0c-0.96,0 -1.92,-0.24 -2.78,-0.7 -0.85,0.46 -1.81,0.7 -2.79,0.7 -2.13,0 -4.12,-1.16 -5.17,-3.03 -1.05,-1.88 -1,-4.17 0.14,-6.01l75.6 -122.22 -9.75 -15.77 -89.2 144.23c-1.08,1.74 -2.99,2.8 -5.05,2.8 -2.14,0 -4.11,-1.16 -5.16,-3.03 -1.05,-1.88 -0.99,-4.17 0.13,-6.01l92.32 -149.25 -9.75 -15.76 -107.65 174.05 -374.02 0 10.94 -17.7c-221.48,91.5 -476.71,12.28 -607.46,-188.54 -130.9,209.94 -391.28,286.75 -608.92,179.63l0 26.61 -317.8 0 0 -2.38 -52.45 0 22.91 64.68 -23.64 8.36 -25.87 -73.04 -100.74 0 0 -25.07 91.86 0 -187.19 -528.36 -11.05 26.94 0 528.87 -207.29 0 0 -1609.67 207.29 0 0 721.65 35.4 -89.48 0 -676.52 -287.82 0 0 73.28c-124.87,-83.95 -208.53,-103.92 -318.32,-103.92 -86.93,0 -277.7,63.37 -378.54,440.77l-25.07 0zm448.99 1277.73l-395.21 0.02 0 -25.08 269.89 0c-205.67,-91.32 -295.28,-421.82 -295.28,-813.61 0,-461.94 124.51,-838.69 417.02,-838.69 134.42,0 210.79,69.05 276.52,131.98l0 41.04c0.02,0.04 0.05,0.08 0.07,0.11l-0.02 347.84 -22.33 0c-48.46,-88.29 -137.56,-212.3 -229.57,-212.3 -153.37,0 -229.22,237.52 -227.3,530.02 -1.92,292.5 73.93,530.02 227.3,530.02 92.01,0 181.11,-124.01 229.57,-212.32l22.33 0 0.02 347.85c-0.02,0.04 -0.05,0.08 -0.07,0.12l0 41.04c-65.14,62.36 -140.75,130.73 -272.94,131.96zm-865.74 -1677.36c289.99,0 413.44,395.49 413.44,838.69 0,443.19 -123.45,838.69 -413.44,838.69 -289.99,0 -413.43,-376.76 -413.43,-838.69 0,-461.94 123.44,-838.69 413.43,-838.69zm-721.95 33.85l-377.58 0 0 934.79c2.43,6.54 4.86,13.08 7.27,19.62 16.95,-4.64 34.54,-6.51 52.09,-5.59 34.33,1.85 65.28,21.33 81.77,51.51 14.9,27.27 21.99,58.11 20.5,89.14 -0.63,12.98 -4.05,25.67 -10.02,37.21 -14.67,28.33 -37.3,51.74 -65.12,67.36 9.41,31.95 18.41,64 26.99,96.18 16.39,61.57 24.11,125.11 22.88,188.81 -0.32,16.43 -3.88,32.64 -10.49,47.68 -6.78,15.42 -18.64,28.04 -33.62,35.76 -10.86,5.6 -23.54,6.52 -35.1,2.56 -11.56,-3.96 -21,-12.46 -26.17,-23.53 -5.99,-12.91 -8.94,-27.02 -8.57,-41.26 0.2,-7.99 4.06,-15.47 10.48,-20.25 8.11,-6.05 18.05,-9.07 28.14,-8.59 6.62,0.32 12.54,4.18 15.52,10.12 2.97,5.93 2.49,13 -1.22,18.49 -4.57,6.77 -11.3,11.81 -19.07,14.31l2.66 5.8c1.25,3.29 4.03,5.77 7.46,6.6 3.43,0.85 7.04,-0.03 9.68,-2.35 13.04,-11.1 21.16,-26.9 22.58,-43.95 1.88,-29.39 1.27,-58.89 -1.85,-88.18 -9.17,-62.54 -22.8,-124.35 -40.8,-184.95 -4.62,1.47 -9.31,2.73 -14.03,3.78 -13.87,3.07 -27.87,5.48 -41.96,7.19l0 391.41 252.69 0 0 52.35 25.08 0 0 -52.35 53.83 0 0 -25.07 -53.83 0 0 -564.41 24.2 0 220.54 589.48 242.19 0 21.89 55.87 23.33 -9.15 -21.75 -55.54 75.57 0 0 -25.07 -85.39 0 -260.8 -665.62c96,-99.03 151.07,-248.06 151.07,-437.34 0,-253.68 -68.67,-472.82 -291.04,-472.82zm-332.61 1171.98c-14.4,5.91 -29.53,9.9 -44.97,11.81l0 -142.65c15.55,43.24 30.49,86.7 44.82,130.36 0.05,0.16 0.1,0.31 0.15,0.48 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0m-23.68 -178.71c4.94,-1.36 9.92,-2.51 14.94,-3.44 15.76,-2.92 32.02,0.87 44.82,10.5 11.66,8.75 20.05,21.15 23.86,35.23 8.47,31.39 6.62,64.67 -5.27,94.93 -2.48,6.35 -6.6,11.93 -11.91,16.21 -4.09,3.28 -8.3,6.37 -12.67,9.27 -16.72,-54.62 -34.63,-108.88 -53.77,-162.7m-21.29 190.52c-3.96,0.48 -7.94,0.84 -11.92,1.05 -43.42,2.36 -83.8,-22.28 -101.56,-61.98 -31.51,-70.46 -36.08,-150.02 -12.87,-223.62 8.15,-25.84 16.57,-51.59 25.27,-77.24 2.4,-7.1 4.82,-14.19 7.29,-21.29 23.3,55.36 45.6,111.16 66.83,167.35 -30.27,16.22 -54.69,41.51 -69.84,72.31 -2.5,5.1 -1.52,11.21 2.47,15.27 3.95,4.05 10.06,5.15 15.19,2.76 4.48,-3.22 8.62,-6.87 12.39,-10.88 15.29,-16.97 33.63,-30.95 54.07,-41.22 4.26,11.61 8.49,23.22 12.68,34.84l0 -106.35c-20.1,-53.81 -41.41,-107.14 -63.89,-160 -3.72,-8.75 -7.54,-17.47 -11.4,-26.14 4.67,-12.85 9.43,-25.67 14.25,-38.47 6.9,-18.25 12.17,-37.07 15.75,-56.25 4.02,-21.69 2.22,-44.08 -5.26,-64.84 -17.03,-47.33 -49.87,-87.33 -92.97,-113.24 -18.96,-11.41 -40.82,-17.04 -62.94,-16.23 -18.52,0.7 -33.48,15.36 -34.57,33.87 -0.97,16.78 2.93,33.51 11.21,48.15 7.69,13.55 15.94,26.74 24.79,39.57 27.29,39.55 50.86,81.53 70.44,125.4 3.86,8.64 7.68,17.28 11.48,25.93 -5.97,16.43 -11.82,32.89 -17.54,49.41 -26.57,76.62 -43.7,156.21 -51.02,236.98 -3.46,38.11 -0.07,76.54 10,113.47 13.84,50.66 58.87,86.54 111.34,88.68 23.48,0.96 47,0.02 70.33,-2.82l0 -34.47m343.36 -1250.81l-390.37 0 0 -60.83 -25.07 0 0 60.83 -58.38 0 0 25.06 58.38 0 0 279.28 25.07 0 0 -279.28 390.37 0 0 -25.06"